#ifndef __DOUBLE_LINK_LIST_H__
#define __DOUBLE_LINK_LIST_H__

// 导入头文件
#include "../../include/Element_data.h"

/* *********************** 声明数据关系 *********************** */
// 定义双向链表节点结构体
typedef struct Double_Node {
    Elenemt_data data;             // 数据域
    struct Double_Node* prev;// 指向前一个节点的指针
    struct Double_Node* next;// 指向下一个节点的指针
} Double_Node;

// 定义双向链表结构体
typedef struct Double_Link_List {
    Double_Node * next; // 指向链表头节点的指针
} Double_Link_List;


/* *********************** 声明操作函数 *********************** */

// 双向链表的创建
int init_double_link_list(Double_Link_List ** list);

// 双向链表的插入
int insert_double_link_list(Double_Link_List* list, Elenemt_data data, int pos);

// 双向链表的删除
int delete_double_link_list(Double_Link_List* list, int pos);

// 双向链表的查找
Double_Node* find_name_double_link_list(Double_Link_List* list, char* name);

// 双向链表的遍历
int print_double_link_list(Double_Link_List* list);


// 双向链表的判空
int Is_Empty_double_link_list(Double_Link_List* list);

// 双向链表的清空
int Clear_double_link_list(Double_Link_List* list);

// 双向链表的合并
int merge_double_link_lists(Double_Link_List* list1, Double_Link_List* list2);

// 双向链表的销毁
int free_double_link_list(Double_Link_List ** list);


#endif